home *** CD-ROM | disk | FTP | other *** search
/ PCMania 81 / PCMania CD81_1.iso / PCMANIA / demosc81 / VESA.H < prev    next >
C/C++ Source or Header  |  1999-02-11  |  8KB  |  196 lines

  1. #include "types.h"
  2.  
  3. #define QUIETMODE    1
  4. #define    FAKEMODE    -1
  5. #define    TEXTMODE    -2        // I haven't programmed this yet. (Any suggestion?)
  6.  
  7. #define m320x400    1
  8. #define m320x480    2
  9. #define m640x400    3
  10. #define m640x480    4
  11.  
  12. //STRUCTURES & PREDEFINED TYPES
  13. typedef VOID        (*FlipProc) (UBYTE *);
  14. typedef VOID        (*BankSwitchProc) (UWORD);
  15. typedef VOID        (*StuffProc) ();
  16.  
  17. typedef struct color
  18. {
  19.     UWORD r,g,b;
  20. }COLOR;
  21.  
  22. typedef struct    pointer
  23. {
  24.     UWORD    segment;        //Pointer's segment
  25.     UWORD    selector;        //Pointer's selector
  26.     UDWORD    memAlloc;        //size of allocated block (in bytes)
  27. }POINTER;
  28.  
  29. typedef struct mode
  30. {
  31.     UWORD    Mode;
  32.     UWORD    Width;
  33.     UWORD    Height;
  34.     UWORD    bpp;
  35.     UWORD    RedPos;
  36.     UWORD    GreenPos;
  37.     UWORD    BluePos;
  38. }MODE;
  39.  
  40. typedef struct rmregs
  41. {
  42.         UDWORD  edi;
  43.         UDWORD  esi;
  44.         UDWORD  ebp;
  45.         UDWORD  reserved;
  46.         UDWORD  ebx;
  47.         UDWORD  edx;
  48.         UDWORD  ecx;
  49.         UDWORD  eax;
  50.         UWORD   flags;
  51.         UWORD   es,ds,fs,gs,ip,cs,sp,ss;
  52. }RMREGS;
  53.  
  54. typedef struct VesaInfo
  55. {
  56.         UBYTE           Signature[4];           // VBE Signature
  57.         UWORD           Version;                // VBE Version
  58.         UWORD           OEMNameOffset;          // Pointer to OEM string (offset)
  59.         UWORD           OEMNameSegment;         // Pointer to OEM string (segment)
  60.         UBYTE           Capabilities[4];        // Graphics capabilities of card
  61.         UWORD           SupportedModesOffset;   // Pointer to Video Mode List (offset)
  62.         UWORD           SupportedModesSegment;  // Pointer to Video Mode List (segment)
  63.         UWORD           TotalMemory;            // Number of 64kb memory blocks
  64.  
  65.         //VBE 2.0+
  66.  
  67.         UWORD           OemSoftwareRev;         // VBE implementation Software revision
  68.         UWORD           OemVendorNameOffset;    // Pointer to Vendor Name String (offset)
  69.         UWORD           OemVendorNameSegment;   // Pointer to Vendor Name String (segment)
  70.         UWORD           OemProductNameOffset;   // Pointer to Product Name String (offset)
  71.         UWORD           OemProductNameSegment;  // Pointer to Product Name String (segment)
  72.         UWORD           OemProductRevOffset;    // Pointer to Product Revision String (offset)
  73.         UWORD           OemProductRevSegment;   // Pointer to Product Revision String (segment)
  74.         UBYTE           Reserved[222];          // Reserved for VBE implementation
  75.         UBYTE           OemData[256];           // Data Area for OEM Strings
  76. }VESAINFO;
  77.  
  78. typedef struct VesaModeInfo
  79. {
  80.         UWORD           ModeAttributes;                 // mode attributes
  81.         UBYTE           WindowAAttributes;              // window A attributes
  82.         UBYTE           WindowBAttributes;              // window B attributes
  83.         UWORD           WindowGranularity;              // window granularity
  84.         UWORD           WindowSize;                     // window size
  85.         UWORD           StartSegmentWindowA;            // window A start segment
  86.         UWORD           StartSegmentWindowB;            // window B start segment
  87.         VOID            (*WinPosFunction)(SDWORD page); // pointer to window function
  88.         UWORD           BytesPerScanLine;               // bytes per scan line
  89.  
  90.     //Remainder of this structure is optional for VESA modes in v1.0/1.1, needed for OEM modes.
  91.  
  92.         UWORD           PixelWidth;                     // horizontal resolution in pixels or chars
  93.         UWORD           PixelHeight;                    // vertical resolution in pixels or chars
  94.         UBYTE           CharacterCellPixelWidth;        // character cell width in pixels
  95.         UBYTE           CharacterCellPixelHeight;       // character cell height in pixels
  96.         UBYTE           NumberOfMemoryPlanes;           // number of memory planes
  97.         UBYTE           BitsPerPixel;                   // bits per pixel
  98.         UBYTE           NumberOfBanks;                  // number of banks
  99.         UBYTE           MemoryModelType;                // memory model type
  100.         UBYTE           SizeOfBank;                     // bank size in KB
  101.         UBYTE           NumberOfImagePages;             // number of images
  102.         UBYTE           Reserved1;                      // reserved for page function
  103.  
  104.     //VBE v1.2+
  105.  
  106.         UBYTE           RedMaskSize;                    // size of direct color red mask in bits
  107.         UBYTE           RedFieldPosition;               // bit position of lsb of red mask
  108.         UBYTE           GreenMaskSize;                  // size of direct color green mask in bits
  109.         UBYTE           GreenFieldPosition;             // bit position of lsb of green mask
  110.         UBYTE           BlueMaskSize;                   // size of direct color blue mask in bits
  111.         UBYTE           BlueFieldPosition;              // bit position of lsb of blue mask
  112.         UBYTE           ReservedMaskSize;               // size of direct color reserved mask in bits
  113.         UBYTE           ReservedFieldPosition;          // bit position of lsb of reserved mask
  114.         UBYTE           DirectColourModeInfo;           // direct color mode attributes
  115.  
  116.         //VBE v2.0+
  117.  
  118.         UWORD           PhysicalBaseOffset;        // physical address for flat frame buffer (offset)
  119.         UWORD           PhysicalBaseSegment;        // physical address for flat frame buffer (segment)
  120.     UWORD        OffScreenMemOffset;        // pointer to start of off screen memory (offset)
  121.     UWORD        OffScreenMemSegment;        // pointer to start of off screen memory (segment)
  122.     UWORD        OffScreenMemSize;        // amount of off screen memory in 1k units
  123.         UBYTE           Reserved2[206];         // Do you guess it??
  124. } VESAMODEINFO;
  125.  
  126. typedef struct resolution {
  127.     UWORD    Width;
  128.     UWORD    Height;
  129.     SWORD    bpp;
  130.     UDWORD    ResolSize;
  131. }RESOLUTION;
  132.  
  133. typedef struct videomode {
  134.     RESOLUTION    Work;
  135.     RESOLUTION    Screen;
  136.         UWORD           RedShift;
  137.         UWORD           GreenShift;
  138.         UWORD           BlueShift;
  139.         UWORD           NumBanks;
  140.         UWORD           NextBank;
  141.     UDWORD        XRatio;
  142.     UDWORD        YRatio;
  143.     BOOL        EnableLFB;
  144.     COLOR        *Palette;
  145.     FlipProc    FlipVideo;
  146.     StuffProc    InitStuff;
  147.     StuffProc    EndStuff;
  148. }VIDEOMODE;
  149.  
  150.  
  151. #ifdef __VESA
  152. static VESAINFO        far *Vesa_Info          = NULL;
  153. static POINTER         Vesa_Info_Ptr;
  154. static VESAMODEINFO    far *Vesa_Mode_Info     = NULL;
  155. static POINTER         Vesa_Mode_Info_Ptr;
  156. static BankSwitchProc  SetBank;
  157. static UDWORD          BankSwitchPtr;
  158. static UDWORD          ScreenAddress;
  159. static UBYTE           *Screen= (UBYTE *) 0xA0000;
  160. UBYTE           *ScreenBuffer;
  161. VIDEOMODE       Active;
  162. UBYTE           Error_Code;
  163. MODE            Vesa_Modes[256];
  164. #else
  165. //PUBLIC VARIABLES
  166. extern VIDEOMODE    Active;
  167. extern UBYTE         Error_Code;
  168. extern UBYTE        *ScreenBuffer;
  169. extern MODE            Vesa_Modes[256];
  170. #endif 
  171.  
  172. BOOL    InitSetMode();
  173. VOID    far *Dos_Alloc(POINTER *In, UDWORD bytes);
  174. BOOL    Dos_Dealloc(POINTER *In);
  175. VOID    Real_Int(UDWORD nint, RMREGS *rmregs);
  176. BOOL    Get_Vesa_Info();
  177. BOOL    Free_Memory();
  178. VOID    ErrorMsg();
  179. VOID    Get_Modes_Info();
  180. VOID    Show_Modes_Info();
  181. BOOL    Set_Vesa_Mode(UWORD Width, UWORD Height, UWORD bpp, BOOL LFB);
  182. VOID    Flip_Banked(UBYTE *WorkBuffer);
  183. VOID    FlipBuc(UBYTE *Buffer,UDWORD Total);
  184. VOID    Flip_LFB(UBYTE *WorkBuffer);
  185. VOID    Flip_Fake_X(UBYTE *WorkBuffer);
  186. VOID    Flip(UBYTE *Buffer);
  187. VOID     Manual_Bank_Switch(UWORD NumBank);
  188. VOID    Internal_Bank_Switch(UWORD nBank);
  189. VOID    Wait();
  190. BOOL    VesaSystem();
  191. BOOL    FakeSystem();
  192. VOID     InterBank(UWORD Bank);
  193. VOID    Set_Mode(UWORD Mode);
  194. VOID    Flip_ScreenB(UBYTE *, UDWORD);
  195. VOID    Flip_ScreenW(UBYTE *, UDWORD);
  196. VOID    Flip_ScreenD(UBYTE *, UDWORD);